package ClassStudy;

import java.io.FileInputStream;
import java.lang.reflect.Method;
import java.util.Properties;

/**
 * @author Cheng Jun
 * @version 1.0
 * @date 2019/11/19 15:09
 * https://blog.csdn.net/javazejian/article/details/70768369
 */
public class ClassLoadProperty {


    public static void main(String[] args) throws Exception {

        // 通过 .class 属性获取 Class 对象不会触发类加载过程的初始化（initialization），只会触发类加载的加载（loading）
        // System.out.println(Student.class);

        Properties properties = new Properties();
        // 注意 文件路径，src 蓝色是表示 sources源文件，
        // 注意java文件的全类名 是在源文件下的 所有包.className（例如 src 是源文件，下面有个 com.cauchy.Student）
        properties.load(new FileInputStream("src\\ClassStudy\\re.properties"));
        // classfullpath=ClassStudy.Student
        // method=hello
        String classfullpath = properties.getProperty("classfullpath");
        String methodName = properties.getProperty("method");

        // 反射创建 Student类对象 aClass
        Class<?> aClass = Class.forName(classfullpath);
        System.out.println(aClass.getClass());
        // 根据 aClass 创建对象
        Object object = aClass.newInstance();
        System.out.println("object 运行时的类型" + object.getClass());
        // 根据 aClass对象 获取Student类的 hello 方法
        Method method = aClass.getMethod(methodName);
        // 厉害吧，以前都是 对象.方法，现在反射中 是 方法.invoke(对象)
        method.invoke(object);

    }

}
